<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Fonts Module Level 4: parsing @font-palette-values</title>
<link rel="help" href="https://drafts.csswg.org/css-fonts/#font-palette-values">
<meta name="assert" content="@font-palette-values is parsed correctly.">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<style id="style">
@font-palette-values {
}

@font-palette-values A {
}

@font-palette-values --A --B {
}

/* 0 */
@font-palette-values --A {
    font-family: a, serif;  /* multiple families are allowed, but not generics */
}

/* 1 */
@font-palette-values --A {
    font-family: 1;
}

/* 2 */
@font-palette-values --A {
    font: 12px a;
}

/* 3 */
@font-palette-values --A {
    base-palette: 1 2;
}

/* 4 */
@font-palette-values --A {
    base-palette: ident;
}

/* 5 */
@font-palette-values --A {
    base-palette: "a" "b";
}

/* 6 */
@font-palette-values --A {
    base-palette: ;
}

/* 7 */
@font-palette-values --A {
    override-colors: ident #123;
}

/* 8 */
@font-palette-values --A {
    override-colors: 0 "red";
}

/* 9 */
@font-palette-values --A {
    override-colors: 0 #123, 1;
}

/* 10 */
@font-palette-values --A {
    override-colors: ;
}

/* 11 */
@font-palette-values --A {
    override-colors: 0 #123 1;
}

/* 12 */
@font-palette-values --A {
    override-colors: 0;
}

/* 13 */
@font-palette-values --A {
    font-family: "";
}

/* 14 */
@font-palette-values --A {
    base-palette: initial;
    override-colors: initial;
}

/* 15 */
@font-palette-values --A {
    base-palette: inherit;
    override-colors: inherit;
}

/* 16 */
@font-palette-values --A {
    base-palette: unset;
    override-colors: unset;
}

/* 17 */
@font-palette-values --A {
    base-palette: -1;
    override-color: -1 #123;
}

/* 18 */
@font-palette-values --A {
    override-colors: 0 canvas;
}

/* 19 */
@font-palette-values --A {
    override-colors: 0 currentcolor;
}

/* 20 */
@font-palette-values --A {
    override-colors: 0 light-dark(white, black);
}

/* 21 */
@font-palette-values --A {
    override-colors: 0 color-mix(in lch, red, canvas);
}

/* 22 */
@font-palette-values --A {
    override-colors: 0 light-dark(white, currentcolor);
}

/* 23 */
@font-palette-values --A {
    override-colors: 0 color-mix(in lch, red, color-mix(in lch, currentcolor, black));
}

/* 24 */
@font-palette-values --A {
    base-palette: sibling-index();
}
</style>
</head>
<body>
<script>
let rules = document.getElementById("style").sheet.cssRules;
test(function() {
    assert_equals(rules.length, 25);
});

test(function() {
    let text = rules[0].cssText;
    let rule = rules[0];
    assert_equals(text.indexOf("font-family"), -1);
    assert_equals(rule.fontFamily, "");
    rule.fontFamily = "SomeFontFamily";
    assert_equals(rule.fontFamily, "");
    assert_equals(rule.basePalette, "");
    rule.basePalette = "7";
    assert_equals(rule.basePalette, "");
    assert_throws_js(TypeError, function() {
        rule.clear();
    });
    assert_throws_js(TypeError, function() {
        rule.delete(4);
    });
    assert_throws_js(TypeError, function() {
        rule.set(4, "0 #123");
    });
});

test(function() {
    let text = rules[1].cssText;
    let rule = rules[1];
    assert_equals(text.indexOf("font-family"), -1);
    assert_equals(rule.fontFamily, "");
});

test(function() {
    let text = rules[2].cssText;
    let rule = rules[2];
    assert_equals(text.indexOf("font:"), -1);
    assert_equals(rule.fontFamily, "");
});

test(function() {
    let text = rules[3].cssText;
    let rule = rules[3];
    assert_equals(text.indexOf("base-palette"), -1);
    assert_equals(rule.basePalette, "");
});

test(function() {
    let text = rules[4].cssText;
    let rule = rules[4];
    assert_equals(text.indexOf("base-palette"), -1);
    assert_equals(rule.basePalette, "");
});

test(function() {
    let text = rules[5].cssText;
    let rule = rules[5];
    assert_equals(text.indexOf("base-palette"), -1);
    assert_equals(rule.basePalette, "");
});

test(function() {
    let text = rules[6].cssText;
    let rule = rules[6];
    assert_equals(text.indexOf("base-palette"), -1);
    assert_equals(rule.basePalette, "");
});

test(function() {
    let text = rules[7].cssText;
    let rule = rules[7];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[8].cssText;
    let rule = rules[8];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[9].cssText;
    let rule = rules[9];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[10].cssText;
    let rule = rules[10];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[11].cssText;
    let rule = rules[11];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[12].cssText;
    let rule = rules[12];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[13].cssText;
    let rule = rules[13];
    // I see nothing in the spec that indicates an empty string is a parse error.
    assert_not_equals(text.indexOf("font-family"), -1);
});

test(function() {
    let text = rules[14].cssText;
    let rule = rules[14];
    assert_equals(text.indexOf("base-palette"), -1);
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.basePalette, "");
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[15].cssText;
    let rule = rules[15];
    assert_equals(text.indexOf("base-palette"), -1);
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.basePalette, "");
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[16].cssText;
    let rule = rules[16];
    assert_equals(text.indexOf("base-palette"), -1);
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.basePalette, "");
    assert_equals(rule.overrideColors, "");
});

test(function() {
    assert_equals(CSSRule.FONT_PALETTE_VALUES_RULE, undefined);
});

test(function() {
    let text = rules[17].cssText;
    let rule = rules[17];
    assert_equals(text.indexOf("base-palette"), -1);
    assert_equals(text.indexOf("override-color"), -1);
    assert_equals(rule.basePalette, "");
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[18].cssText;
    let rule = rules[18];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.basePalette, "");
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[19].cssText;
    let rule = rules[19];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[20].cssText;
    let rule = rules[20];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[21].cssText;
    let rule = rules[21];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[22].cssText;
    let rule = rules[22];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[23].cssText;
    let rule = rules[23];
    assert_equals(text.indexOf("override-colors"), -1);
    assert_equals(rule.overrideColors, "");
});

test(function() {
    let text = rules[24].cssText;
    let rule = rules[24];
    assert_equals(text.indexOf("base-palette"), -1);
    assert_equals(rule.basePalette, "");
}, "sibling-index() is invalid in base-palette descriptor");
</script>
</body>
</html>
